网络分析概述之网络基础简介
网络基础概述
何为网络,及其基本结构
在数学中,“网络”(networks)通常被称为“图”(graphs),关于图研究的数学领域称为“图理论”(graph theory)。网络图中的基本元素是节点和边,构建网络图时,将对象称为“节点”(vertices或nodes),并通常将它们绘制为点;将节点之间的连接称为“边”(edges或links),并且通常将它们绘制为点之间的线。如此,得到了网络图。
正式地来说,一个图G=(V,E)是一种包含“节点”集合V与“边”集合E的数学结构,其中E的元素是不同节点的无序组合{u,v},u,v∈V。节点的数量Nv=|V|和边的数量Ne=|E|有时分别被称为图G的“阶数”(order)和“规模”(size)。不失一般性,常简单地使用整数1,…,Nv对节点和边进行标记。
网络可以代表现实世界中的各种系统,例如,可以将因特网描述为网络,其中节点是计算机或其他设备,边是设备之间的物理连接(线路,或者无线);食物链中,节点是物种,边代表了能量的单向流动。
也可以反映假定的关联模型,例如,通过转录组的基因表达水平的相对变化,推测基因间的相互作用关系;微生物物种的互作关系难以像宏观物种那样直接观测,也常根据丰度的协变去推断。
其他示例如社交网络、运输网络、代谢网络、通信网络等等。如下展示一些网络图示例。
(https://mathinsight.org/image/internet_map_jurvetson_2004)
(https://mathinsight.org/image/us_congress_twitterers_porternovelli_2009)
(https://mathinsight.org/image/c_elegans_connectome_anatomy_model)
(https://mathinsight.org/image/metabolic_network_model_for_Escherichia_coli)
网络图基本类型,有向图和无向图
对于网络图G,若集合E中每条边的两个节点都有次序(即对于u,v∈V,(u,v)与(v,u)不同),则图G称为“有向图”(directed graph或digraph)。这些边被称为“有向边”(directed edges)或“弧”(ares),有向边(u,v)的方向规定从左到右,即从起点u指向终点v。需要注意的是,有向图中一对节点间可能有两条有向边,分别以其中一个节点作为起点,另一个作为终点,此时,两条有向边称为是“双向”(mutual)的。类似的,对于网络图G,若每条边的两个节点没有次序,则图G称为“无向图”(undirected graph)。在某些情况下,也可能允许节点具有自连接,这意味着在网络图中出现某节点从自身到自身的边,即“自环”(loops)。
若两个节点间存在多余一条边(称为“多重边”,multi-edges)的情况,或者图中出现“自环”的情况,则图被称为“多重图”(multi-graph)。非多重图称为“简单图”(simple graph),其边称为“正常边”(proper edges)。
图示有向图、无向图,以及双向和自连接类型。
有向网络示例,如KEGG代谢通路,已知的生化反应代谢过程。有向边两侧的节点一个代表底物,一个代表产物。其中很多双向的边,代表了可逆的生化过程。
无向网络示例,如在RNA-seq分析中,基于某种数学模型构建的基因共表达网络,常用无向网络表示。节点代表基因,边代表了某个基因表达量的上调/下调和另外一个基因的表达量显著相关。
(文献出处:Comparative Anterior Pituitary miRNA and mRNA Expression Profiles of Bama Minipigs and Landrace Pigs Reveal Potential Molecular Network Involved in Animal Postnatal Growth)
节点、边和图的属性和特征
(文献出处:Distinct biogeographic patterns of rhizobia and non-rhizobial endophytes associated with soybean nodules across China)
节点属性
节点属性是以节点作为索引的变量,既可以是离散的也可以是连续的。如在微生物互作网络中,每一个节点代表了一类微生物(如OTU、属、门),或者其它非物种属性,如功能基因、环境变量等,这些节点包含多种各自的属性特征。
如下示例,表格记录了某微生物互作网络中的部分节点属性信息,包括物种信息以及环境因子属性信息。node,网络节点id;phylum,OTU所属的门分类(环境因子记作env);genus,OTU所属的属分类(环境因子记作env);value,OTU的相对丰度,环境因子的测量指标;type,节点属于物种类型(OTU),还是环境因子类型(env)。
在实际的网络分析中,各节点属性往往作为附加内容在后续添加至已构建好的网络中,帮助我们更好地识别网络结构。
边属性
与节点属性类似,边属性是以相邻的节点对(也就是边)作为索引的变量,包括离散和连续两种情况。离散的边属性例子,如在微生物相关性网络中,两个物种之间是正相关(共发生)还是负相关(共排斥)关系。连续的边属性常用来表示某种节点对之间关系的强度,例如在微生物相关性网络中,两个物种之间的相关系数。
边属性在很多分析中可以认为是权重(weighted)。按照惯例,边的权重一般是非负的,且常被缩放至0到1的区间内。如在微生物相关性网络中,可以物种之间相关系数的绝对值定义为边的权重。边具有权重的图称为“含权图”(weighted graph)。
如下示例,表格记录了某微生物互作网络(相关性网络)中的部分边属性信息,包括物种-物种以及物种-环境因子相关性信息。edge,记录了哪两个节点之间存在边连接;type,边类型,该条边是物种-物种互作还是物种-环境因子互作;correlation,相关性网络构建时所得到的物种-物种相关性以及物种-环境因子相关系数,数值表示相关性强弱,符号表示正、负相关;weight,边的权重,这里表示了相关系数的绝对值。
同节点属性,在实际的网络分析中,边属性也往往作为附加内容在后续添加至已构建好的网络中,帮助我们更好地识别网络结构。
节点、边和图的拓扑结构
网络拓扑结构涉及内容较多,篇幅原因就不作详细介绍了,基本概念详见:
节点和边的拓扑结构:http://blog.sciencenet.cn/blog-3406804-1193906.html
网络图的拓扑结构:http://blog.sciencenet.cn/blog-3406804-1193908.html
后续我会再修改完善,同步到公众号上。
通常,在研究一个复杂系统时,感兴趣的问题可以重新表述,转化为某些与对应网络图的结构或特征相关的问题。例如,涉及信息或商品流通的问题通常可以表述为网络图的路径和路径中的流;系统中某个元素的“重要性”可以通过度量网络中相应节点“靠近中心”的程度来表示;寻找系统中的“社团”以及类似的未指明的“团体”,则常作为图分割问题进行分析;等等。
在这一方面,还需多查阅资料,多阅读文献,明确自己关注的问题,选择合适的网络分析手段,以对科学问题作出合理的解释。
网络图的表示及处理
网络数据文件
现实中,并不能经常手动地输入一个图,因为大多数现实网络的节点和边数量即是不是几万个(或者几百万个),至少也有几十个。而构建网络图所需要的信息通常存储在数据文件里。从最基本的角度说,存在三种表示图的格式:邻接列表、边列表及邻接矩阵。
图G的“邻接列表”(adjacency list)是一个大小为Nv,按照V中节点的顺序排列的序列。序列的每个元素都是一个列表,若存在i为起点j为终点的边,则第i个列表是所有的终点节点j的集合。
这是igraph常用的一种表示方法,该数据结构不便展示,还请大家自行了解。如使用R包igraph,str()查看网络图。
“边列表”(edge list)是一个简单的两列列表,给出了所有的边连接的节点对。在边列表中,记录边的形式是由节点u指向节点v(source -> target)。若为有向网络,u指向v和v指向u的意义是不同的;若为无向网络,则u指向v和v指向u是等同的。
边列表中有时会含有额外的内容,作为记录边的属性信息,如权重等。因此,边列表也经常作为边属性文件使用。
图也可以用矩阵的形式存储。对于图G=(V,E),一个大小为Nv×Nv的“邻接矩阵”(adjacency matrix)A定义如下:
若矩阵A行列标号分别为(i,j)的元素非零,则图G中对应存在一条由i指向j的边:若该元素为零,则不存在边。对于无向图,矩阵A是对称矩阵。
对于非零元素,可以直接使用“1”表示,表示两个节点间存在连接;更具体些,使用具体的数值,代表了边的权重(含权网络)。两个节点间不存在边,一定要标识为0。
网络分析及可视化的常用工具
除此之外,尚有许多其它的网络分析工具,还请大家自行了解了。
* R包igraph的基本操作
末了先简单展示一下最最基本的操作,包括文件读写、格式转换、数据结构等,后续的章节将主要使用igraph包处理数据,并会再详细介绍更多操作。
示例数据和R代码链接(提取码:mab5):
https://pan.baidu.com/s/1GR7gwPDwtlgNECZF3t2uzQ
##输入数据示例,邻接矩阵#带权重的邻接矩阵
adjacency_weight <- read.delim('adjacency_weight.txt', row.names = 1, sep = '\t', check.names = FALSE)
adjacency_weight
#不带权重的邻接矩阵
adjacency_unweight <- read.delim('adjacency_unweight.txt', row.names = 1, sep = '\t', check.names = FALSE)
adjacency_unweight
##格式转换示例
#带权重邻接矩阵 -> igraph 的邻接列表,获得含权的无向网络
igraph_weight = graph_from_adjacency_matrix(as.matrix(adjacency_weight), mode = 'undirected', weighted = TRUE, diag = FALSE)
igraph_weight
is.weighted(igraph_weight)
#不带权重的邻接矩阵 -> igraph 的邻接列表,获得非含权的无向网络
igraph_unweight = graph_from_adjacency_matrix(as.matrix(adjacency_unweight), mode = 'undirected', weighted = NULL, diag = FALSE)
igraph_unweight
is.weighted(igraph_unweight)
##网络图绘制
plot(igraph_weight, layout = layout.circle)
plot(igraph_unweight, layout = layout.fruchterman.reingold)
##节点和边操作,以含权网络为例
#节点操作,例如将 OTU 人为地分为两组
otu_num <- nrow(adjacency_weight)
group1 <- round(otu_num/2)
group2 <- otu_num - group1
V(igraph_weight)$color <- c(rep('purple', group1), rep('orange', group2))
plot(igraph_weight, layout = layout.circle)
#边操作,例如边权重代表了 OTU 相关性,根据相关性正负分为两组
weight <- E(igraph_weight)$weight #查看边的权重
color <- rep('', length(weight))
color[which(weight > 0)] <- 'red'
color[which(weight < 0)] <- 'green'
E(igraph_weight)$color <- color
plot(igraph_weight, layout = layout.circle)
##输出节点属性和边属性列表,以含权网络为例
#节点属性列表,输出 OTU 名称,以及上述赋值的颜色
node_list <- data.frame(
id = names(V(igraph_weight)),
color = V(igraph_weight)$color
)
node_list
write.table(node_list, 'node_list.txt', sep = '\t', row.names = FALSE, quote = FALSE)
#边属性列表,输出相关的 OTU 的关系,代表相关系数的边权重,以及上述赋值的颜色
edge <- data.frame(as_edgelist(igraph_weight)) #igraph 的邻接列表转为边列表
edge_list <- data.frame(
source = edge[[1]],
target = edge[[2]],
weight = E(igraph_weight)$weight,
color = E(igraph_weight)$color
)
write.table(edge_list, 'edge_list.txt', sep = '\t', row.names = FALSE, quote = FALSE)
参考资料
Eric D Kolacayk, Gabor Csardi, 网络数据的统计分析:R语言实践(李杨 译). 西安交通大学出版社, 2016.
Math Insight:https://mathinsight.org/index/general
降维分析
非约束排序(描述性的探索性分析):
主成分分析(PCA):主成分分析(PCA) 同时含数值和分类变量的PCA
对应分析(CA):对应分析(CA) 去趋势对应分析(DCA)
非度量多维标度分析(NMDS):非度量多维标度分析(NMDS)
非约束排序中被动添加解释变量:被动添加解释变量约束排序(将解释变量通过回归方程拟合响应变量的统计模型):
冗余分析(RDA):冗余分析(RDA) 基于距离的冗余分析(db-RDA)
RDA、CCA的变差分解(VAP)对称分析(这类方法意在描述两个或多个矩阵之间的相关性):
多元因子分析(MFA)监督降维(带监督的降维方法,常用于分类):
判别分析(DA)聚类和分类
层次聚类(无监督,描述性的探索性分析):
层次聚合:层次聚合分类 层次聚类结果的比较和评估
层次分划:双向指示种分析(TWINSPAN)非层次聚类(无监督,描述性的探索性分析):
划分聚类:k均值划分(k-means) 围绕中心点划分(PAM)
模糊聚类:模糊c均值聚类(FCM)
避免不存在的类潜变量分类(无监督,潜变量也可视为某种意义上的“降维”):
潜类别分析(LCA) 潜剖面分析(LPA)约束聚类(无监督,将解释变量通过回归方程“约束”响应变量的模型):多元回归树监督分类(通过已知先验分组构建分类器模型):
决策树 随机森林分类
判别分析(DA):线性判别分析(LDA) 二次判别分析(QDA)